[小ネタ] GradleのLinterを導入して不要な依存関係を抽出してみた
はじめに
多くのJavaプロジェクトで使われているビルドツール、Gradleについて調べている過程で、プラグインの依存関係を確認する方法を知り、それに関連して不要なプラグインを洗い出す手順を試してみました。
設定
ここでは、既存のGradleプロジェクトの設定ファイルであるbuild.gradle
を一時的に編集し、使用していないプラグインのみをLinterで検出してみます。
まずは、Gradle Lint Pluginをプロジェクトに追加し、Linterを導入します。
(ちなみにこのNebulaとは、Netflixが提供しているGradleのプラグイン集だそうです。)
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.netflix.nebula:gradle-lint-plugin:latest.release' // ← ★これを追記 } }
次に、rootプロジェクトを含む全プロジェクトに適用させるため、以下のようにallprojectsを追記します。
多くのrulesがあるようですが、ここではunused-dependency
を指定しています。
allprojects { apply plugin: 'nebula.lint' gradleLint.alwaysRun = false gradleLint.rules += 'unused-dependency' }
実行
コマンドラインで次のように実行し、結果をログに出力させます。
(一例ですが、ここではwrapperを使用しています。そして-x
オプションでテストを省略しています)
./gradlew -x compileTestJava lintGradle hogehoge:compileJava > lintGradle.log 2>&1
大きいプロジェクトだと少し時間がかかるかもしれませんが、完了後にlintGradle.log
を見てみます。
例えば、以下のようにwarning
が出力されていることを確認できました。
- snip - warning unused-dependency this dependency is unused and can be removed hoge-prj/build.gradle:23 compile "ch.fuga.piyo:xxx:$xxxVersion" warning unused-dependency this dependency is unused and can be removed hoge-prj/build.gradle:26 compile "jp.fuga:piyo:$yyyVersion" warning unused-dependency this dependency is unused and can be removed hoge-prj/build.gradle:27 compile "org.hoge.piyo:zzz:$zzzVersion" - snip -
おわりに
Gradleの依存関係で何らかの問題が生じた際は、ローカルキャッシュを削除してダウンロードをやり直すなどの方法を試すことになるかと思います。
そのような時に、予め不要なプラグインかどうかが分かっていると、その後のアクションが取りやすい場合があるかもしれません。
どなたかに届けば幸いです。